package com.jiangyg.devtools.toolkit;

import com.intellij.ide.util.PropertiesComponent;
import com.jiangyg.devtools.entity.code.TemplateDefinition;
import com.jiangyg.devtools.ui.table.ColumnWidth;
import org.apache.commons.lang.StringUtils;

import java.util.Collections;
import java.util.List;

/**
 * 类描述：缓存工具
 *
 * @author jiangyg
 * @date 2023-08-30
 */
public class CacheUtils {

    private static final String CACHE_KEY = "com.jiangyg.devtools.code.%s";

    private static final PropertiesComponent instance = PropertiesComponent.getInstance();

    /**
     * 功能描述：获取代码模板列表
     *
     * @return 代码模板列表
     * @throws Exception 异常
     */
    public static List<TemplateDefinition> getCodeTemplate() throws Exception {
        final String cacheKey = obtainCacheKey("templates");
        final String value = instance.getValue(cacheKey);
        if (StringUtils.isBlank(value)) {
            return Collections.emptyList();
        }
        return JsonUtils.parseArrayList(value, TemplateDefinition.class);
    }

    /**
     * 功能描述：设置代码模板缓存
     *
     * @param templates 代码模板
     */
    public static void setCodeTemplate(List<TemplateDefinition> templates) {
        final String cacheKey = obtainCacheKey("templates");
        instance.setValue(cacheKey, JsonUtils.toJSONString(templates));
    }

    /**
     * 功能描述：获取指定表格列宽缓存
     *
     * @param tableName 表格名
     * @return 列宽缓存
     * @throws Exception 异常
     */
    public static List<ColumnWidth> getTableColumnWidth(String tableName) throws Exception {
        final String cacheKey = obtainCacheKey("table." + tableName + ".widths");
        final String value = instance.getValue(cacheKey);
        if (StringUtils.isBlank(value)) {
            return Collections.emptyList();
        }
        return JsonUtils.parseArrayList(value, ColumnWidth.class);
    }

    /**
     * 功能描述：设置指定表格列宽缓存
     *
     * @param tableName 表格名
     * @param widths    列宽属性
     */
    public static void setTableColumnWidth(String tableName, List<ColumnWidth> widths) {
        final String cacheKey = obtainCacheKey("table." + tableName + ".widths");
        instance.setValue(cacheKey, JsonUtils.toJSONString(widths));
    }

    /**
     * 功能描述：缓存键值
     *
     * @param key 键值
     * @return 缓存键值
     */
    private static String obtainCacheKey(String key) {
        return String.format(CACHE_KEY, key);
    }

}
